This invention generally relates to the field of digital data transmission. More specifically a mechanism in which a sender node transmits a plurality of data units and a receiver node buffers the data units, transmitting an acknowledgment for each unit.
In computer systems, it is often necessary to transmit data from one node to another. An example of such transmission is Fibre Channel nodes. Transmission of information proceeds in units where the units are packets of information and may include architecture specific information such as headers, CRC fields, source or destination identifiers and the like. Packets are data associated together to form a single unit for transmission. A bus may be a point to point fiber-optic serial bus. The bus in an obvious alternative to this embodiment could also include switches and repeaters as are known in the art as in fibre channel fabrics. Packets are often transmitted over a unidirectional bus. Packets are also often received over a second unidirectional bus. In one example implementation, such a pair of unidirectional serial buses might be utilized to transmit data packets from a first node to a second node, while receiving acknowledgments from the second node at the first node.
To increase the speed of communication, sending (transmitting) nodes often do not require the acknowledgment of the fact that one packet has been processed by the receiver before sending out the next packet. In such a design, many packets can be sent before the first is acknowledged. Sending out multiple unacknowledged packets in this fashion, is made possible by allowing the receiver to buffer received packets that have not yet been processed. The maximum number of packet buffers available for the receiver to use is the maximum available receiver credit.
To illustrate for example, during transmission of packets, the available receiver credit is maintained in a counter as viewed by the sender. The count is decremented when a packet is sent and incremented when a packed is received. It will be understood that it doesn""t really matter whether the count is incremented or decremented because the ability to transfer packets can still be inferred from the count. As the receiver completes the processing of each buffered packet, an acknowledgement is transmitted via the bus to the sender. When the acknowledgement is recognized by the sender, the available receiver credit is incremented. If however, the sender erroneously misses an acknowledgment for a packet it has sent to the receiver, the available receiver credit, as viewed by the sender, will remain at the decremented value. The receiver might miss an acknowledgment for a number of reasons. For example: (1) because of a link transmission error, the receiver never recognized the original packet, or (2) the packet was successfully received; however, the acknowledgement was never recognized by the sender because of a transmission error. At this point, one receiver credit is permanently lost. If the link condition persists, further buffer credits likewise can be lost leading to serious performance degradation. In theory, this process could continue until all receiver credit is lost terminating the transmission of packets.
Methods are known to solve the problem. One such method is the use of packet sequence numbers. In this solution, each packet is assigned a sequence number from a contiguous set and it can be used as a means for distinguishing it from other unacknowledged packets. Thus the loss of acknowledgments can be detected from a discontinuity in the sequence number. One challenge in implementing the sequence number is the additional complexity in maintaining the sequence numbers at the nodes involving potentially several thousands of different operations. An example of the additional complexity is the amount of logic needed to correctly distinguish if the discontinuity is caused by the allowed out of order packet processing or because of an actual receiver credit loss. Another solution, usually used in an arbitrated environment, is to only allow a node to send packets during certain time-slots. At the beginning of the time-slot, the arbitrating entity assures that the available receiver credit as viewed by the sender is correct. One challenge with this solution is that due to latency issues and also possible demands on the arbitrating entity, the topology and the number of nodes in the network is limited. Moreover, the transmission at a node is disrupted, in the sense that there will be long periods of time during which the node can not transmit anything.
The foregoing shortcomings of the prior art are addressed and further advantageous features provided by the present invention which entails the use of alternating commands in predefined periods of packet transmission.
It is therefore an object of the present invention to manage transmission to a remote buffer such that the buffer is fully utilized by maintaining a sense of the availability of buffer space even when responses (acknowledgment) signals are not received by the sender.
It is another object of the invention to maintain a count at a sending node indicative of the availability of a remote buffer specification and correct the count when responses are lost.
It is yet another object of the invention to count the number of packets sent using one packet type and compare the count with the corresponding number of acknowledgments of one type received during a pre-specified time period.
It is still another object of the invention to count the number of packets sent using one packet type and compare the count with the corresponding number of acknowledgments of one type received for a pre-specified number of concurrent transmissions.
It is further, an object of the invention to sense the beginning and end of a group of packets sent by sending a first group with a first packet type and a second group with a second packet type wherein the receiver detects the transition from one type to another as a group boundary.
It is yet a further object of the invention to sense the beginning and end of a group of acknowledgments sent by sending a first group with a first acknowledgment type and a second group with a second acknowledgment type wherein the receiver detects the transition from one type to another as a group boundary.
These and other objects of the invention are provided by a transmitting node architecture that allows for the sender and the receiver to periodically synchronize with each other, and reclaim any lost buffer credits by means of a nondisruptive method.